package de.draufi.logging;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.LogManager;
import java.util.logging.Logger;

public class myLogger {
   
   private static ArrayList<Logger> log = new ArrayList<Logger>();
   private static ArrayList<String> logClassNames = new ArrayList<String>();
   private static Level logLevel;
   
   
   public static Logger getLog(String clName)
   {
       Logger l;

       if (logClassNames.contains(clName))
       {
           l = log.get(logClassNames.indexOf(clName));
       }else
       {
           setLog(clName);
           l = log.get(logClassNames.indexOf(clName));
       }

       return l;
   }
   
   public static void setLog(String clName)
   {
       if (logClassNames.isEmpty())
       {
           // erstmaliges Lesen der Log-Manager-Configuration
           try
           {
               LogManager.getLogManager().readConfiguration(new FileInputStream("properties/logging.properties"));
           } catch (IOException ioe)
           {
              ioe.printStackTrace();
           }

           // erstes Mitglied anlegen
           logClassNames.add(clName);
           // Logger bereitstellen
           log.add(Logger.getLogger(clName));
           // Level setzen
           if (logLevel != null)
           {
               getLog(clName).setLevel(logLevel);
           }
       } else
       {
           // Es gibt bereits Logger...
           if (!logClassNames.contains(clName)) {
               //Den gibts noch nicht
               logClassNames.add(clName);
               log.add(Logger.getLogger(clName));
               if (logLevel != null)
               {
                   getLog(clName).setLevel(logLevel);
               }
           }
       }
       Logger lg = getLog(clName);
       Level lv = lg.getLevel();
       if (lv == null)
       {
           System.err.println("LogLevel für " + clName + " noch nicht in der .properties-Datei eingetragen!");
           System.err.println("LogLevel wird auf " + Level.INFO.getName() + " festgelegt.");
           lg.setLevel(Level.INFO);
           lv = lg.getLevel();
       }
   }
}
